Completed
Push — feature/delete_items ( 8d7f82 )
by Tristan
31:05 queued 19:23
created

$(document).ready   B

Complexity

Conditions 7
Paths 5

Size

Total Lines 22
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 10
c 0
b 0
f 0
dl 0
loc 22
rs 8
cc 7
nc 5
nop 1
1
// =============================================================================
2
3
    // Utilities JavaScript (jQuery)
4
5
// =============================================================================
6
7
(function($) {
8
9
    // Add isValid()
10
11
        $.fn.isValid = function(){
12
            return this[0].checkValidity()
13
        }
14
15
    // Root
16
17
        var $root = $('html, body');
18
19
    // Add has attribute Function
20
    $.fn.hasAttr = function(name) {
21
        var attr = $(this).attr(name);
22
        // For some browsers, `attr` is undefined; for others,
23
        // `attr` is false.  Check for both.
24
        return (typeof attr !== typeof undefined && attr !== false);
25
26
    };
27
28
    // User Agent Data Attributes ==============================================
29
30
        var ua = navigator.userAgent;
31
        ua = ua.toString();
32
        console.log("hello");
33
        $('body').attr('id', ua);
34
35
    $(document).ready(function() {
36
37
        // Accordion Handlers ==================================================
38
39
            function accordionTrigger(trigger) {
40
                if ($(trigger).parent(".accordion").hasClass("active")) {
41
                    $(trigger).attr("aria-expanded", "false");
42
                    $(trigger).parent(".accordion").removeClass("active");
43
                    $(trigger).parent(".accordion").find(".accordion-content").attr("aria-hidden", "true");
44
                }
45
                else {
46
                    $(trigger).attr("aria-expanded", "true");
47
                    $(trigger).parent(".accordion").addClass("active");
48
                    $(trigger).parent(".accordion").find(".accordion-content").attr("aria-hidden", "false");
49
                }
50
            }
51
52
            $(document).on("click", ".accordion-trigger", function(e){
53
54
                accordionTrigger(this);
55
56
            });
57
58
            $(document).on("keyup", ".accordion-trigger", function(e){
59
60
                if(e.which == 13) {
61
                    accordionTrigger(this);
62
                }
63
64
            });
65
66
        // Modal Handlers ======================================================
67
68
            function openModal(trigger) {
69
70
                var modalID = $(trigger).attr("data-modal-id");
71
                var modal = $(".modal[data-modal-id="+modalID+"]");
72
                var modalObject = $(trigger).parents(".modal-target-object");
73
                $(".modal-overlay").addClass("active");
74
                modal.addClass("active");
75
                $("body").css("overflow", "hidden");
76
77
                // Tab Items
78
79
                var focusableItems = modal.find(":focusable");
80
81
                var firstInput = focusableItems.first();
82
                var lastInput = focusableItems.last();
83
84
                if (modal.find("form").length == 0) {
85
                    lastInput.focus();
86
                }
87
                else {
88
                    firstInput.focus();
89
                }
90
91
                modalTabHandler(firstInput, lastInput);
92
                modalDeleteTrigger(trigger, modal, modalObject);
93
                escapeModalHandler();
94
95
            }
96
97
            $(document).on("click", ".modal-trigger", function(e){
98
99
                openModal(this);
100
101
            });
102
103
            $(document).on("keyup", ".modal-trigger", function(e){
104
105
                if(e.which == 13) {
106
                    openModal(this);
107
                }
108
109
            });
110
111
112
            function closeModal(trigger) {
113
114
                $(".modal-overlay").removeClass("active");
115
                $(".modal").removeClass("active");
116
                $("body").css("overflow", "visible");
117
118
            }
119
120
            $(document).on("click", ".modal-cancel-trigger", function(e){
121
122
                closeModal(this);
123
124
            });
125
126
            $(document).on("keyup", ".modal-cancel-trigger", function(e){
127
128
                if(e.which == 13) {
129
                    closeModal(this);
130
                }
131
132
            });
133
134
            // Delete Trigger ==================================================
135
136
                function modalDeleteTrigger(trigger, modal, object) {
137
138
                    $(document).on("click", ".modal-delete-trigger", function(e){
139
140
                        //TODO: when items are saved with ajax too, the check
141
                        // will become more complicated than checking for a
142
                        // delete url
143
144
                        //If object has been saved to server, make an ajax delete
145
                        // call to the item url, and only close the modal when it
146
                        // succeeds
147
                        if ( $(object).attr('data-item-saved') ) {
148
                            var itemId = $(object).attr('data-item-id');
149
                            var deleteUrl = $(object).attr('data-item-url').replace(':id', itemId);
150
151
                            axios.delete(deleteUrl)
152
                                .then(function(response) {
153
                                    closeModal(trigger);
154
                                    $(object).remove();
155
                                });
156
                            //TODO: catch and present errors
157
158
                        } else {
159
                            //If no deletion url provided, simply delete the
160
                            // object and close the modal.
161
162
                            closeModal(trigger);
163
                            $(object).remove();
164
                        }
165
                    });
166
167
                }
168
169
            // Tab Handler =====================================================
170
171
                function modalTabHandler(first, last) {
172
173
                    $(document).on("keydown", function(e){
174
175
                        var keyCode = e.keyCode || e.which;
176
177
                        if (keyCode == 9 && !e.shiftKey) {
178
179
                            if ($(last).is(":focus")) {
180
                                e.preventDefault();
181
                                $(first).focus();
182
                            }
183
184
                        }
185
                        else if (keyCode == 9 && e.shiftKey) {
186
187
                            if($(first).is(":focus")) {
188
                                e.preventDefault();
189
                                $(last).focus();
190
                            }
191
192
                        }
193
194
                    });
195
196
                }
197
198
            // Escape Handler ==================================================
199
200
                function escapeModalHandler() {
201
202
                    $(document).on("keyup", function(e){
203
204
                        if((e.key==='Escape'||e.key==='Esc'||e.keyCode===27)){
205
206
                            $(".modal-overlay").removeClass("active");
207
                            $(".modal").removeClass("active");
208
                            $("body").css("overflow", "visible");
209
210
                            // FF and compatible
211
                            if (e.stopPropagation) {
212
                                e.stopPropagation();
213
                                e.preventDefault();
214
                            }
215
216
                        }
217
218
                    });
219
220
                }
221
222
        // Form Handlers =======================================================
223
224
            // Required Fields
225
226
                function requiredFields() {
227
                    $("input:required, textarea:required").each(function(e) {
228
                        $(this).parent().addClass("required");
229
                        $(this).parent().find("label").append("<span class='form__required'><i class='fa fa-asterisk' aria-label='Asterisk'></i></span>");
230
                    });
231
                }
232
233
                requiredFields();
234
235
            // Label Handers ===================================================
236
237
                function labelHandlers() {
238
239
                    $("[class*='form__input-wrapper'] input, [class*='form__input-wrapper'] textarea").focusin(function(e) {
240
                        $(this).parent().addClass("active");
241
                    });
242
243
                    $("[class*='form__input-wrapper'] input, [class*='form__input-wrapper'] textarea").focusout(function(e) {
244
245
                        // Check for existing value.
246
247
                            if ($(this).val() == "") {
248
                                $(this).parent().removeClass("active");
249
                            }
250
251
                        // Check Validity
252
253
                            if ($(this).isValid() == true) {
254
255
                                if ($(this).val() == "" || $(this).attr("type") == "password") {
256
                                    $(this).parent().removeClass("valid");
257
                                    $(this).parent().removeClass("invalid");
258
                                }
259
                                else {
260
                                    $(this).parent().addClass("valid");
261
                                    $(this).parent().removeClass("invalid");
262
                                }
263
264
                            }
265
                            else {
266
267
                                if ($(this).attr("type") == "password") {
268
                                    return false;
269
                                }
270
                                else {
271
                                    $(this).parent().addClass("invalid");
272
                                    $(this).parent().removeClass("valid");
273
                                }
274
275
                            }
276
277
                    });
278
279
                }
280
281
                labelHandlers();
282
283
        // Individualizing repeater name and id attributes======================
284
285
                //Individualize template attributes
286
                function appendToAttributes(parent, attribute, suffix, conditions = null) {
287
                    var selector = "*[" + attribute + "]";
288
289
                    //If conditions is set, only modify attributes that also
290
                    //satisfy that selector
291
                    if (conditions) {
292
                        selector = conditions + selector;
293
                    }
294
295
                    parent.find(selector).each(function() {
296
                        $(this).attr(attribute, $(this).attr(attribute) + suffix);
297
                    });
298
                }
299
300
                //Individualize template attributes
301
                function replaceInAttributes(parent, attribute, oldString, newString, conditions = null) {
302
                    var selector = "*[" + attribute + "]";
303
304
                    //If conditions is set, only modify attributes that also
305
                    //satisfy that selector
306
                    if (conditions) {
307
                        selector = conditions + selector;
308
                    }
309
310
                    parent.find(selector).each(function() {
311
                        //replaces only the first instance of a match in a string
312
                        $(this).attr(attribute, $(this).attr(attribute).replace(oldString, newString));
313
                    });
314
                }
315
316
                //Return the next unused idAttr value
317
                function getNextItemId(parent, idAttr = "data-item-id") {
318
                    var maxId = 0;
319
                    parent.find("*[" + idAttr + "]").each(function() {
320
                        var id = parseInt( $(this).attr(idAttr) );
321
                        if (id > maxId) {
322
                            maxId = id;
323
                        }
324
                    });
325
                    return maxId + 1;
326
                }
327
328
                //The all in one function to set proper ids and form names
329
                function individualizeFormIdsAndNames(template, wrapper) {
330
                    // Get New ID
331
                    var newId = getNextItemId(wrapper);
332
333
                    //Set date-item-id, used to track which newId's are taken
334
                    template.attr('data-item-id', newId);
335
336
                    //Differentiate real forms from templates
337
338
                    // filter, if we only want to affect certain results
339
                    var filter = '';
340
341
                    replaceInAttributes(template, 'id', ':template', 'new', filter);
342
                    replaceInAttributes(template, 'for', ':template', 'new', filter);
343
                    replaceInAttributes(template, 'name', ':template', 'new', filter);
344
                    replaceInAttributes(template, 'submit', ':template', 'new', filter);
345
                    replaceInAttributes(template, 'value', ':template', 'new', filter+'[name=submit]');
346
347
                    replaceInAttributes(template, 'id', ':id', newId, filter);
348
                    replaceInAttributes(template, 'for', ':id', newId, filter);
349
                    replaceInAttributes(template, 'name', ':id', newId, filter);
350
                    replaceInAttributes(template, 'submit', ':id', newId, filter);
351
                    replaceInAttributes(template, 'value', ':id', newId, filter+'[name=submit]');
352
                }
353
354
        // Profile List Handlers ===============================================
355
356
            // Add Profile Element
357
                function addProfileElement(trigger) {
358
359
                    // Get Parent
360
                        var parent = $(trigger).parents(".profile-list");
361
362
                    // Get List Wrapper
363
                        var wrapper = parent.find(".profile-element-list");
364
365
                    // Set Null to Hidden
366
                        parent.find(".profile-null").removeClass("active");
367
368
                    // Get Template
369
                        var template = parent.find(".profile-element.template").clone();
370
371
                    // Remove Template Class
372
                        template.removeClass("template");
373
374
                    //Set ids and form names to be unique
375
                    individualizeFormIdsAndNames(template, wrapper);
376
377
                    // Prepend Clone to the Wrapper
378
                    wrapper.prepend(template);
379
380
                    // Reactivate Required Fields
381
                        requiredFields();
382
383
                    // Reactivate Labels
384
                        labelHandlers();
385
386
                    // Reactivate Nested Relatives
387
                        loadProfileRelatives();
388
389
                }
390
391
                // Click Trigger
392
                    $(".profile-list__add-element-trigger").on("click", function(e) {
393
394
                        // Prevent Default Functions
395
                            e.preventDefault();
396
397
                        // Add Profile Elements
398
                            addProfileElement(this);
399
400
                    });
401
402
                // Enter Key Trigger
403
                    $(".profile-list__add-element-trigger").on("keyup", function(e) {
404
405
                        if(e.which == 13) {
406
407
                            // Prevent Default Functions
408
                                e.preventDefault();
409
410
                            // Add Profile Elements
411
                                addProfileElement(this);
412
413
                        }
414
415
                    });
416
417
            // Remove Profile Element
418
419
            // Add Profile Relative
420
                function addProfileRelative(trigger) {
421
422
                    // Get Parent
423
                        var parent = $(trigger).parents(".profile-relative-list");
424
425
                    // Get List Wrapper
426
                        var wrapper = parent.find(".profile-relative-list__wrapper");
427
428
                    // Set Null to Hidden
429
                        // parent.find(".profile-null").removeClass("active");
430
431
                    // Get Template
432
                        var template = parent.find(".profile-relative.template").clone();
433
434
                    // Remove Template Class
435
                        template.removeClass("template");
436
437
                    //Set ids and form names to be unique
438
                    individualizeFormIdsAndNames(template, wrapper);
439
440
                    // Append Clone to the Wrapper
441
                    wrapper.append(template);
442
443
                    // Reactivate Required Fields
444
                        requiredFields();
445
446
                    // Reactivate Labels
447
                        labelHandlers();
448
449
                    // Reactivate Nested Relatives
450
                        loadProfileRelativeDeletion();
451
452
                }
453
454
                // Load Function
455
                    function loadProfileRelatives() {
456
457
                        // Click Trigger
458
                            $(".profile-relative__add-trigger").off("click");
459
460
                            $(".profile-relative__add-trigger").on("click", function(e) {
461
462
                                // Prevent Default Functions
463
                                    e.preventDefault();
464
465
                                // Add Profile Relative
466
                                    addProfileRelative(this);
467
468
                            });
469
470
                        // Enter Key Trigger
471
                            $(".profile-relative__add-trigger").off("keyup");
472
473
                            $(".profile-relative__add-trigger").on("keyup", function(e) {
474
475
                                if(e.which == 13) {
476
477
                                    // Prevent Default Functions
478
                                        e.preventDefault();
479
480
                                    // Add Profile Relative
481
                                        addProfileRelative(this);
482
483
                                }
484
485
                            });
486
487
                    }
488
489
                    loadProfileRelatives();
490
491
            // Remove Profile Relative
492
                function deleteProfileRelative(trigger) {
493
494
                    $(trigger).parents(".profile-relative").remove();
495
496
                }
497
498
                // Load Function
499
                    function loadProfileRelativeDeletion() {
500
501
                        // Click Trigger
502
                            $(".profile-relative__remove-trigger").on("click", function(e) {
503
504
                                // Prevent Default Functions
505
                                    e.preventDefault();
506
507
                                // Delete Profile Relative
508
                                    deleteProfileRelative(this);
509
510
                            });
511
512
                        // Enter Key Trigger
513
                            $(".profile-relative__remove-trigger").on("keyup", function(e) {
514
515
                                if(e.which == 13) {
516
517
                                    // Prevent Default Functions
518
                                        e.preventDefault();
519
520
                                    // Delete Profile Relative
521
                                        deleteProfileRelative(this);
522
523
                                }
524
525
                            });
526
527
                    }
528
529
                    loadProfileRelativeDeletion();
530
531
        // Experience Handlers =================================================
532
533
            // Degrees
534
535
                function addDegree(trigger) {
536
537
                    // Get Wrapper
538
                    var wrapper = $(".application-post__experience-wrapper");
539
540
                    // Get Template
541
                    var template = $(".application-post__accordion--degree.template").clone();
542
543
                    // Remove Template Class
544
                    template.removeClass("template");
545
546
                    //Set ids and form names to be unique
547
                    individualizeFormIdsAndNames(template, wrapper);
548
549
                    // Append Clone to the Wrapper
550
                    wrapper.append(template);
551
552
                    requiredFields();
553
                    labelHandlers();
554
555
                }
556
557
                $("#addDegreeButton").on("click", function(e) {
558
559
                    e.preventDefault();
560
561
                    addDegree(this);
562
563
                });
564
565
                $("#addDegreeButton").on("keyup", function(e) {
566
567
                    if(e.which == 13) {
568
                        e.preventDefault();
569
                        addDegree(this);
570
                    }
571
572
                });
573
574
            // Courses
575
576
                function addCourse(trigger) {
577
578
                    // Get Wrapper
579
                    var wrapper = $(".application-post__experience-wrapper");
580
581
                    // Get Template
582
                    var template = $(".application-post__accordion--course.template").clone();
583
584
                    // Remove Template Class
585
                    template.removeClass("template");
586
587
                    //Set ids and form names to be unique
588
                    individualizeFormIdsAndNames(template, wrapper);
589
590
                    // Append Clone to the Wrapper
591
                    wrapper.append(template);
592
593
                    requiredFields();
594
                    labelHandlers();
595
596
                }
597
598
                $("#addCourseButton").on("click", function(e) {
599
600
                    e.preventDefault();
601
602
                    addCourse(this);
603
604
                });
605
606
                $("#addCourseButton").on("keyup", function(e) {
607
608
                    if(e.which == 13) {
609
                        e.preventDefault();
610
                        addCourse(this);
611
                    }
612
613
                });
614
615
            // Work
616
617
                function addWork(trigger) {
618
619
                    // Get Wrapper
620
                    var wrapper = $(".application-post__experience-wrapper");
621
622
                    // Get Template
623
                    var template = $(".application-post__accordion--work.template").clone();
624
625
                    // Remove Template Class
626
                    template.removeClass("template");
627
628
                    //Set ids and form names to be unique
629
                    individualizeFormIdsAndNames(template, wrapper);
630
631
                    // Append Clone to the Wrapper
632
                    wrapper.append(template);
633
634
                    requiredFields();
635
                    labelHandlers();
636
637
                }
638
639
                $("#addWorkButton").on("click", function(e) {
640
641
                    e.preventDefault();
642
643
                    addWork(this);
644
645
                });
646
647
                $("#addWorkButton").on("keyup", function(e) {
648
649
                    if(e.which == 13) {
650
                        e.preventDefault();
651
                        addWork(this);
652
                    }
653
654
                });
655
656
        // Create Job Handlers =================================================
657
658
            // Tasks
659
660
                function addTask(trigger) {
661
662
                    // Get Wrapper
663
                    var wrapper = $(".manager-jobs__create-task-wrapper");
664
665
                    // Get Template
666
                    var template = $(".manager-jobs__create-task.template").clone();
667
668
                    console.log(wrapper.find(".manager-jobs__create-task"));
669
670
                    // Get New ID
671
                    if (wrapper.find(".manager-jobs__create-task").length == 0) {
672
                        var newID = parseInt(template.attr("data-task-id")) + 1;
673
                    }
674
                    else {
675
                        var newID = parseInt(wrapper.find("[class*='manager-jobs__create-task']").last().attr("data-task-id")) + 1;
676
                    }
677
678
                    // Remove Template Class
679
                    template.removeClass("template");
680
681
                    //TODO: replace with call to individualizeFormIdsAndNames(template, wrapper);
682
                    //TODO: This requires changes to JobController@create, because the id would change places
683
684
                    // Assign the New ID
685
                    template.attr("data-task-id", newID);
686
687
                    // Add newID as suffix to all "id" and "for" attributes
688
                    template.find("*[id]").each(function() { $(this).attr("id", this.id + newID)});
689
                    template.find("*[for]").each(function() { $(this).attr("for",  $(this).attr("for") + newID)});
690
691
                    // Replace :id with newID in all form names
692
                    template.find("*[name]").each(function() { $(this).attr('name', $(this).attr("name").replace(":id", newID))});
693
694
                    // Task (English)
695
                    //template.find("[data-form-id*='task-english']").find("label").attr("for", "taskEN" + newID);
696
                    //template.find("[data-form-id*='task-english']").find("input").attr("id", "taskEN" + newID);
697
698
                    // Task (French)
699
                    //template.find("[data-form-id*='task-french']").find("label").attr("for", "taskFR" + newID);
700
                    //template.find("[data-form-id*='task-french']").find("input").attr("id", "taskFR" + newID);
701
702
                    // Append Clone to the Wrapper
703
                    wrapper.append(template);
704
705
                    requiredFields();
706
                    labelHandlers();
707
                    deleteTaskTrigger();
708
709
                }
710
711
                $("#addTaskButton").on("click", function(e) {
712
713
                    e.preventDefault();
714
715
                    addTask(this);
716
717
                });
718
719
                $("#addTaskButton").on("keyup", function(e) {
720
721
                    if(e.which == 13) {
722
                        e.preventDefault();
723
                        addTask(this);
724
                    }
725
726
                });
727
728
                // Task Deletion
729
730
                function deleteTask(trigger) {
731
732
                    $(trigger).parents(".manager-jobs__create-task").remove();
733
734
                }
735
736
                function deleteTaskTrigger() {
737
738
                    $(".manager-jobs__delete-task-button").on("click", function(e) {
739
740
                        e.preventDefault();
741
742
                        deleteTask(this);
743
744
                    });
745
746
                    $(".manager-jobs__delete-task-button").on("keyup", function(e) {
747
748
                        if(e.which == 13) {
749
                            e.preventDefault();
750
                            deleteTask(this);
751
                        }
752
753
                    });
754
755
                }
756
757
                deleteTaskTrigger();
758
759
            // Skills
760
761
                function addSkill(trigger) {
762
763
                    // Get Parent
764
                    var parent = $(trigger).parents(".manager-jobs__skill-wrapper");
765
766
                    // Get Wrapper
767
                    var wrapper = parent.find(".manager-jobs__create-skill-wrapper");
768
769
                    // Get Template
770
                    var template = parent.find(".manager-jobs__create-skill.template").clone();
771
772
                    console.log(wrapper.find(".manager-jobs__create-skill"));
773
774
                    // Remove Template Class
775
                    template.removeClass("template");
776
777
                    //Set ids and form names to be unique
778
                    individualizeFormIdsAndNames(template, wrapper);
779
780
                    // Append Clone to the Wrapper
781
                    wrapper.append(template);
782
783
                    requiredFields();
784
                    labelHandlers();
785
                    deleteSkillTrigger();
786
787
                }
788
789
                $(".manager-jobs__add-skill-button").on("click", function(e) {
790
791
                    e.preventDefault();
792
793
                    addSkill(this);
794
795
                });
796
797
                $(".manager-jobs__add-skill-button").on("keyup", function(e) {
798
799
                    if(e.which == 13) {
800
                        e.preventDefault();
801
                        addSkill(this);
802
                    }
803
804
                });
805
806
                // Skill Deletion
807
808
                function deleteSkill(trigger) {
809
810
                    $(trigger).parents(".manager-jobs__create-skill").remove();
811
812
                }
813
814
                function deleteSkillTrigger() {
815
816
                    $(".manager-jobs__delete-skill-button").on("click", function(e) {
817
818
                        e.preventDefault();
819
820
                        deleteSkill(this);
821
822
                    });
823
824
                    $(".manager-jobs__delete-skill-button").on("keyup", function(e) {
825
826
                        if(e.which == 13) {
827
                            e.preventDefault();
828
                            deleteSkill(this);
829
                        }
830
831
                    });
832
833
                }
834
835
                deleteSkillTrigger();
836
837
            // Questions
838
839
                function addQuestion(trigger) {
840
841
                    // Get Wrapper
842
                    var wrapper = $(".manager-jobs__create-question-wrapper");
843
844
                    // Get Template
845
                    var template = $(".manager-jobs__create-question.template").clone();
846
847
                    console.log(wrapper.find(".manager-jobs__create-question"));
848
849
                    // Get New ID
850
                    if (wrapper.find(".manager-jobs__create-question").length == 0) {
851
                        var newID = parseInt(template.attr("data-question-id")) + 1;
852
                    }
853
                    else {
854
                        var newID = parseInt(wrapper.find("[class*='manager-jobs__create-question']").last().attr("data-question-id")) + 1;
855
                    }
856
857
                    // Remove Template Class
858
                    template.removeClass("template");
859
860
                    //TODO: replace with call to individualizeFormIdsAndNames(template, wrapper);
861
                    //TODO: This requires changes to JobController@create, because the id would change places
862
863
                    // Assign the New ID
864
                    template.attr("data-question-id", newID);
865
866
                    // Add newID as suffix to all "id" and "for" attributes
867
                    template.find("*[id]").each(function() { $(this).attr("id", this.id + newID)});
868
                    template.find("*[for]").each(function() { $(this).attr("for",  $(this).attr("for") + newID)});
869
870
                    // Replace :id with newID in all form names
871
                    template.find("*[name]").each(function() { $(this).attr('name', $(this).attr("name").replace(":id", newID))});
872
873
                    // Edit Form IDs
874
                        //
875
                        // // Queestion (English)
876
                        // template.find("[data-form-id*='question-english']").find("label").attr("for", "questionEN" + newID);
877
                        // template.find("[data-form-id*='question-english']").find("input").attr("id", "questionEN" + newID);
878
                        //
879
                        // // Queestion (French)
880
                        // template.find("[data-form-id*='question-french']").find("label").attr("for", "questionFR" + newID);
881
                        // template.find("[data-form-id*='question-french']").find("input").attr("id", "questionFR" + newID);
882
883
                    // Append Clone to the Wrapper
884
                    wrapper.append(template);
885
886
                    requiredFields();
887
                    labelHandlers();
888
                    deleteQuestionTrigger();
889
890
                }
891
892
                $("#addQuestionButton").on("click", function(e) {
893
894
                    e.preventDefault();
895
896
                    addQuestion(this);
897
898
                });
899
900
                $("#addQuestionButton").on("keyup", function(e) {
901
902
                    if(e.which == 13) {
903
                        e.preventDefault();
904
                        addQuestion(this);
905
                    }
906
907
                });
908
909
                // Question Deletion
910
911
                function deleteQuestion(trigger) {
912
913
                    $(trigger).parents(".manager-jobs__create-question").remove();
914
915
                }
916
917
                function deleteQuestionTrigger() {
918
919
                    $(".manager-jobs__delete-question-button").on("click", function(e) {
920
921
                        e.preventDefault();
922
923
                        deleteQuestion(this);
924
925
                    });
926
927
                    $(".manager-jobs__delete-question-button").on("keyup", function(e) {
928
929
                        if(e.which == 13) {
930
                            e.preventDefault();
931
                            deleteQuestion(this);
932
                        }
933
934
                    });
935
936
                }
937
938
                deleteQuestionTrigger();
939
940
    });
941
942
})(jQuery);
943